﻿/** 异形对铁血战士脚本(UTF-8 with BOM)
  功能:下上拳,滑铲
  WinKawaks模拟器暂停,即时存档读档,静音切换
  游聚平台连发,热键中断切换,静音切换
  
  By setycyas @2022-12-15
*/

/* 全局设置,库调用,全局量定义
*/ {
  ;** 全局设置
  #NoEnv
  #Warn
  #MaxThreadsPerHotkey 1
  SendMode Input
  SetWorkingDir %A_ScriptDir%

  ;** 库调用
  #Include ..\MyAhkModules\MyKey.ahk ;按键相关库,导出函数以MyKey_开头
  #Include ..\MyAhkModules\MyWinkawaks.ahk ;导入自定义的Winkawaks通用快捷键,用MyWinKawaks_setHotkeys()函数设置
  #Include ..\MyAhkModules\MyXZone.ahk ;导入自定义的游聚平台通用快捷键,用MyXZone_setHotkeys()函数设置
  #Include ..\MyAhkModules\MyFaceDetector.ahk ;方向检测,用MyFaceDetector_setup()函数设置

  ;** 枚举量,全体大写
  
  ;** 常量,全体大写
  global GAME_NAME := "游戏名称" ;用于在Gui中显示游戏名字
  global KEY_PUNCH := "x" ,KEY_JUMP := "e", KEY_GUN := "s" ;按键设置

  ;** 全局变量
  ;* 绑定到gui组件的全局变量,以G开头
  global GtestParam1 := 50, GtestParam2 := 50, GtestParam3 := 150 ;测试参数
  ;* 一般全局变量

} ;不缩进块

/* 自定义函数,除Gui设置,Gui响应和热键绑定专用函数以外
*/ {
  
  ;** 缩短MyKey模块的函数名称
  press(key, pressDuration := 100){ 
    return MyKey_press(key, pressDuration)
  }
  pressKeys(keys, delays, duration := 20){
    return MyKey_pressKeys(keys, delays, duration)
  }
  waitKeyUp(key, waitTime, waitDuration := 100){
    return MyKey_waitKeyUp(key, waitTime, waitDuration)
  }
  inputSkill(keys, delays){
    return MyKey_inputSkill(keys, delays)
  }
  autoFire(fireKey, autoFireKey, duration := 20, delay := 20){
    return MyKey_normalAutoFire(fireKey, autoFireKey, duration, delay)
  }

  ;** 游戏操作相关函数
  duSkill(){
    press("down", 30)
    sleep, 20
    pressKeys(["up", KEY_PUNCH], [30])
    sleep, 200
  }
  
  slide(){
    local direction := MyFaceDetector_getFace()
    /*
    send, {%direction% down}
    sleep, %GtestParam1%
    send, {down down}
    sleep, %GtestParam2%
    press(KEY_JUMP)
    send, {%direction% up}
    sleep, 20
    send, {down up}
    */
    pressKeys([direction, "down", KEY_JUMP], [GtestParam1, GtestParam2], GtestParam3)
    sleep, 200
  }
  
  frontJump(){
    local direction := MyFaceDetector_getFace()
    pressKeys([direction, "up", KEY_JUMP], [GtestParam1, GtestParam2], GtestParam3)
    sleep, 200
  }
}

/* 设置Gui与Gui响应
*/ {   
  ;生成主Gui
  mainGui() {
    Gui, New, , w异形对铁血战士
    Gui, Add, Text, x+20 y+20, GtestParam1： ;
    Gui, Add, Edit, xp+80 yp-3 W60 vGtestParam1, %GtestParam1% ;测试参数1
    Gui, Add, Text, xp-80 yp+30, GtestParam2： ;
    Gui, Add, Edit, xp+80 yp-3 W60 vGtestParam2, %GtestParam2% ;测试参数2
    Gui, Add, Text, xp-80 yp+30, GtestParam3： ;
    Gui, Add, Edit, xp+80 yp-3 W60 vGtestParam3, %GtestParam3% ;测试参数3
    Gui, Add, Button, xp-80 yp+30 gButtonMainSubmit, 提交 ;提交
    Gui, Add, Button, xp+100 gButtonExit, 退出 ;结束app
    Gui, +AlwaysOnTop
    Gui, Show, x1085 y250
  }

  ;** Gui响应函数,以大写字母和组件类型开头
  
  ;提交主要设置
  ButtonMainSubmit(ctrlHwnd, guiEvent, eventInfo){
    Gui, Submit, NoHide ; 保存用户输入后每个控件的数据,NoHide可以在提交数据后保持窗体显示
    MsgBox, You have submit your changes!
  }
  ;退出按钮
  ButtonExit(ctrlHwnd, guiEvent, eventInfo){
    ExitApp
  }

}

/* 设置快捷键的函数与快捷键响应函数
*/ {
  ;** 设置快捷键的函数
  setupHotkeys(){
    MyFaceDetector_setup("WinKawaks.exe")
    MyWinKawaks_setHotkeys() ;WinKawaks通用热键
    Hotkey, IfWinActive, ahk_exe WinKawaks.exe
    Hotkey, ~q, Key_Q
    Hotkey, ~r, Key_R
    Hotkey, ~2, Key_2
    Hotkey, IfWinActive
  }
  
  ;** 快捷键响应函数,以Key_按键命名
  Key_Q(){
    ;duSkill()
    slide()
  }
  Key_R(){
    ;slide()
    frontJump()
  }
  Key_2(){
    duSkill()
  }
}

/* 定义结束,脚本开始
*/ 
mainGui()
setupHotkeys()
return
